package com.imooc.api.controller.user;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;

@Api(value = "controller的标题", tags={"xx功能的controller"})
public interface HelloControllerApi {

    /**
     *  api的作用：
     *  api就相当于企业的领导，老板，部门经理
     *  其他的服务层都是实现，他们就相当于员工，只做事情
     *  老板（开发人员）来看一下每个人（服务）的进度，做什么事
     *  老板不会去问员工，他只会对接部门经理
     *  那么这里的所有api接口就是统一在这里进行调度和管理的，微服务也是如此
     */

    /**
     * 运作：
     * 现在的所有接口都在此暴露，实现都是在各自的微服务中
     * 本项目只写接口，不写实现，实现在各自的微服务工程中，因为以业务来划分的微服务有很多
     * controller也会分散在各个微服务工程中，一旦多了就很难统一管理和查看
     *
     * 其次，微服务之间的调用都是基于接口的
     * 如果不这么做，微服务之间的调用就需要相互依赖了
     * 耦合度也就高了，接口的目的是为了能够解耦
     *
     * 此外，本工程的接口其实就是一套规范，实现都是由各自的工程去做的处理
     * 目前我们使用springboot作为接口的实现
     * 如果以后出现新的java web框架，那么我们不需要修改接口
     * 只需要去修改对应的实现就可以了，这其实也是解耦的一个体现
     *
     * Swagger2，基于接口的文档自动生成
     * 所有的配置文件只需要一份，就能在当前项目中去构建了
     * 管理起来很方便
     *
     * 综上所示，如此做法，可以提高很多服务的项目可扩展性
     */

    @ApiOperation(value = "hello方法的接口", notes = "hello方法的接口", httpMethod = "GET")
    @GetMapping("/hello")
    public Object hello();
}
